As the data-storage capacities, computational bandwidths, data-transfer bandwidths, and other characteristics of computer systems have geometrically increased during the past 60 years, and as computer systems and processor-control devices have inexorably permeated and come to dominate many different areas of human activity as well as provided the foundation for many new types of human activity, including electronic commerce and electronic social networking, the complexity of computer systems has also geometrically increased. While early computers featured a single processor, very small, dedicated data-storage components, and primitive input/output devices, modern computer systems may comprise thousands or more processors within hundreds or more discrete computer systems distributed over geographical areas and interconnected by high-speed electronic communications connections. While early computer systems were capable of running only a single program, at any given point in time, even modern personal computers may store the data and instructions for tens, hundreds, or even thousands of different programs, a large number of which may be running at any given point in time. Early computer systems lacked even basic operating systems, while modern computers often feature virtualization layers, multiple operating systems, many specialized applications, and many other types of programs and utilities.
The configuration, management, and administration of large, complex modern computer systems has, as a result of the increasing complexity of modern computer systems, become a separate field in computer science and an important and ongoing undertaking within organizations that deploy and maintain computer systems, including data centers, cloud-computing facilities, and networked personal computers and servers that together provide computational facilities for employees within various types of organizations. In general, in modern computer systems, the components and subcomponents of a computer system, including firmware components, hardware components, and software components, are associated with various types of identifying information, including a version number. Generally, during the period of time over which a type of product is manufactured and sold, the product is revised and updated at various points in time, with each new revision and major update associated with a new version number. Often, the version numbers are multi-part version identifiers that identify the major version and one or more additional levels of subordinate versions. One part of the configuration and administration tasks associated with complex systems is to ensure that components of the complex systems are updated according to various rules, procedures, policies, and schedules. As one example, software applications and operating systems are frequently updated through distribution of various patches produced by ongoing bug detection and amelioration efforts carried out by operating-system vendors. Administration of the system may involve formulating various procedures and rules, such as a rule that each operating system within one or more discrete computer systems within a complex, distributed computing environment must be updated to the most current available major version of the operating system and to within three versions of a latest subordinate version, such as subordinate versions corresponding to minor feature-and-function updates.
Unfortunately, while the various rules, procedures, policies, and schedules for carrying out updates to, and replacement of, components of a complex system are often rationally devised and well understood by certain individuals within an organization, they may be easily lost due to personnel changes and reassignments or become obscured, over time, as the complex systems grow and change and additional administrators are assigned to their administration. In many cases, including cases in which complex systems are virtualized for running within virtual data centers, acquired by new management groups or organizations, or operationally moved to different physical facilities, it may become necessary to determine and clearly specify the various procedures, rules, policies, and schedules that underlie the current configuration and, when available, the configuration history of a complex system. Currently, only imperfect methods and techniques are available for recovering information about the rules, procedures, policies, and schedules that define system configurations and that steer system administration. These methods include interviewing those who developed the rules, procedures, policies, and schedules and those who have used the rules, procedures, and schedules to configure and maintain a system and attempting to infer the rules, procedures, policies, and schedules from incomplete written records. The current document is directed to an automated system for inferring the logical rules underlying the configuration and version management within complex systems using information about the current configuration of the complex system as well as historical configuration information, when available.